/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.ufc.quixada.dao;

import br.com.ufc.quixada.entidades.Filmes;
import br.com.ufc.quixada.util.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author FuscaoGames
 */
public class FilmesDAO {

    private Connection con;

    public FilmesDAO() throws ClassNotFoundException {
        con = new ConnectionFactory().getConnection();
    }

    public void destroy() {
        try {
            con.close();
        } catch (SQLException ex) {
            Logger.getLogger(FilmesDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void inserirFilme(Filmes filme) throws SQLException {
        PreparedStatement stmt = null;

        try {
            String sql = "INSERT INTO filmes (titulo, genero, imagem, diretor, ano, sinopse) VALUES (?,?,?,?,?,?)";
            stmt = con.prepareStatement(sql);

            stmt.setString(1, filme.getTitulo());
            stmt.setString(2, filme.getGenero());
            stmt.setString(3, filme.getImagem());
            stmt.setString(4, filme.getDiretor());
            stmt.setString(5, filme.getAno());
            stmt.setString(6, filme.getSinopse());

            stmt.execute();


        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (con != null) {
                con.close();
            }
            if (stmt != null) {
                stmt.close();
            }
        }
    }

    public void updateFilme(Filmes filme) throws SQLException {
        PreparedStatement stmt = null;

        try {
            String sql = "UPDATE filmes SET titulo = ?, genero = ?, imagem = ?, diretor = ?, ano = ?, sinopse = ? WHERE codigo = ?";
            stmt = con.prepareStatement(sql);

            stmt.setString(1, filme.getTitulo());
            stmt.setString(2, filme.getGenero());
            stmt.setString(3, filme.getImagem());
            stmt.setString(4, filme.getDiretor());
            stmt.setString(5, filme.getAno());
            stmt.setString(6, filme.getSinopse());
            stmt.setLong(7, filme.getCodigo());

            stmt.executeUpdate();


        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (con != null) {
                con.close();
            }
            if (stmt != null) {
                stmt.close();
            }
        }
    }

    public void deleteFilme(Filmes filme) throws SQLException {
        PreparedStatement stmt = null;

        try {
            String sql = "DELETE FROM filmes WHERE codigo = ? ";
            stmt = con.prepareStatement(sql);

            stmt.setLong(1, filme.getCodigo());

            stmt.execute();


        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (con != null) {
                con.close();
            }
            if (stmt != null) {
                stmt.close();
            }
        }
    }

    public ArrayList<Filmes> listaFilme() throws SQLException {
        ArrayList<Filmes> filmes = new ArrayList<Filmes>();
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            String sql = "SELECT * FROM filmes ORDER BY titulo";
            stmt = con.prepareStatement(sql);
            rs = stmt.executeQuery();

            while (rs.next()) {
                long codigo = rs.getLong("codigo");
                String titulo = rs.getString("titulo");
                String genero = rs.getString("genero");
                String imagem = rs.getString("imagem");
                String diretor = rs.getString("diretor");
                String ano = rs.getString("ano");
                String sinopse = rs.getString("sinopse");


                Filmes filme = new Filmes();

                filme.setCodigo(codigo);
                filme.setTitulo(titulo);
                filme.setGenero(genero);
                filme.setImagem(imagem);
                filme.setDiretor(diretor);
                filme.setAno(ano);
                filme.setSinopse(sinopse);

                filmes.add(filme);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (con != null) {
                con.close();
            }
            if (stmt != null) {
                stmt.close();
            }
            if (rs != null) {
                rs.close();
            }
        }

        return filmes;
    }

    public Filmes findByCodigo(Long codigoc) throws SQLException {
        PreparedStatement stmt = null;
        ResultSet rs = null;
        Filmes filme = new Filmes();

        try {
            String sql = "SELECT * FROM filmes WHERE codigo = ?";

            stmt = con.prepareStatement(sql);
            stmt.setLong(1, codigoc);
            rs = stmt.executeQuery();

            if (rs.next()) {
                long codigo = rs.getLong("codigo");
                String titulo = rs.getString("titulo");
                String genero = rs.getString("genero");
                String imagem = rs.getString("imagem");
                String diretor = rs.getString("diretor");
                String ano = rs.getString("ano");
                String sinopse = rs.getString("sinopse");


                filme.setCodigo(codigo);
                filme.setTitulo(titulo);
                filme.setGenero(genero);
                filme.setImagem(imagem);
                filme.setDiretor(diretor);
                filme.setAno(ano);
                filme.setSinopse(sinopse);

            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (con != null) {
                con.close();
            }
            if (stmt != null) {
                stmt.close();
            }
            if (rs != null) {
                rs.close();
            }
        }


        return filme;
    }

    public ArrayList<Filmes> findByGenero(String generoc) throws SQLException {
        PreparedStatement stmt = null;
        ResultSet rs = null;
        ArrayList<Filmes> filmes = new ArrayList<Filmes>();

        try {
            String sql = "SELECT * FROM filmes WHERE genero = ? ORDER BY titulo";

            stmt = con.prepareStatement(sql);
            stmt.setString(1, generoc);
            rs = stmt.executeQuery();

            while (rs.next()) {
                long codigo = rs.getLong("codigo");
                String titulo = rs.getString("titulo");
                String genero = rs.getString("genero");
                String imagem = rs.getString("imagem");
                String diretor = rs.getString("diretor");
                String ano = rs.getString("ano");
                String sinopse = rs.getString("sinopse");


                Filmes filme = new Filmes();

                filme.setCodigo(codigo);
                filme.setTitulo(titulo);
                filme.setGenero(genero);
                filme.setImagem(imagem);
                filme.setDiretor(diretor);
                filme.setAno(ano);
                filme.setSinopse(sinopse);

                filmes.add(filme);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (con != null) {
                con.close();
            }
            if (stmt != null) {
                stmt.close();
            }
            if (rs != null) {
                rs.close();
            }
        }


        return filmes;
    }

    public ArrayList<Filmes> findByMidia(String midia) throws SQLException {
        PreparedStatement stmt = null;
        ResultSet rs = null;
        ArrayList<Filmes> filmes = new ArrayList<Filmes>();

        try {
            String sql = "SELECT codigo, titulo, genero, imagem, diretor, ano, sinopse FROM filmes, exemplar WHERE codigo = codigofilme AND midia = ? ORDER BY titulo";

            stmt = con.prepareStatement(sql);
            stmt.setString(1, midia);
            rs = stmt.executeQuery();

            while (rs.next()) {
                long codigo = rs.getLong("codigo");
                String titulo = rs.getString("titulo");
                String genero = rs.getString("genero");
                String imagem = rs.getString("imagem");
                String diretor = rs.getString("diretor");
                String ano = rs.getString("ano");
                String sinopse = rs.getString("sinopse");


                Filmes filme = new Filmes();

                filme.setCodigo(codigo);
                filme.setTitulo(titulo);
                filme.setGenero(genero);
                filme.setImagem(imagem);
                filme.setDiretor(diretor);
                filme.setAno(ano);
                filme.setSinopse(sinopse);

                filmes.add(filme);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (con != null) {
                con.close();
            }
            if (stmt != null) {
                stmt.close();
            }
            if (rs != null) {
                rs.close();
            }
        }


        return filmes;
    }

}
